package org.styloot.hobo.thriftserver; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TBinaryProtocol.Factory; import org.apache.thrift.server.TServer; import org.apache.thrift.server.TThreadPoolServer; import org.apache.thrift.transport.TServerSocket; import org.apache.thrift.transport.TTransportException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.*; import java.io.*; import java.io.IOException; import org.styloot.hobo.thriftserver.*; import org.styloot.hobo.gen.*; import org.styloot.hobo.*; import org.styloot.hobo.hoboindex.*; public class Server { private static final Logger log = LoggerFactory.getLogger(Server.class); public Server(HoboIndex i, int pt, int ps) { index = i; port = pt; pageSize = ps; } private HoboIndex index; private int port; private int pageSize; private void start(){ try { TServerSocket serverTransport = new TServerSocket(port); Hobo.Processor processor = new Hobo.Processor(new HoboServerImpl(index, pageSize)); TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor)); server.serve(); } catch (TTransportException e) { e.printStackTrace(); } } public static void main(String args[]) throws Exception { log.info("Loading list of items from " + args[0]); FileReader infile = new FileReader(args[0]); Collection<Item> items = itemsFromInputStream(new BufferedReader(infile)); infile.close(); log.info("Loaded " + items.size() + " items."); log.info("Items are indexed with " + Feature.count() + " features."); HoboIndex index = new SimpleHoboIndex(items); log.info("Build SimpleHoboIndex."); int port = Integer.parseInt(args[1]); int pageSize = Integer.parseInt(args[2]); Server srv = new Server(index, port, pageSize); log.info("Starting HoboServer - listening on port " + port + ", pagesize=" + pageSize); srv.start(); } private static Collection<Item> itemsFromInputStream(BufferedReader reader) throws Exception { String line; Vector<Item> result = new Vector<Item>(); long lineCount = 0; while ((line = reader.readLine()) != null) { try { String[] tokens = line.split(";"); String[] features = null; if (tokens.length >= 5) { features = tokens[4].split(","); } CIELabColor color = null; if (!tokens[3].equals("")) { String[] colorStrings = tokens[3].split(","); color = CIELabColor.CIELabFromRGB(Integer.parseInt(colorStrings[0]), Integer.parseInt(colorStrings[1]), Integer.parseInt(colorStrings[2])); } result.add(new Item(tokens[0], tokens[1], features, Integer.parseInt(tokens[2]), color, Integer.parseInt(tokens[5]))); lineCount += 1; } catch (Exception e) { log.error("Error parsing line " + lineCount + ": " + line); throw e; } } return result; } }